﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Windows.Forms;
using EXT;
using DevExpress.XtraEditors;

namespace BanHangCshap.ChungTu
{
    public partial class frmBanhangS : Form
    {
        string kh;
        string manhapxuat0;
        public static string manhapxuat = "";
        bool Dathang;
        public frmBanhangS(string kh, string manhapxuat, bool Dathang)
        {
            this.kh = kh;
            this.manhapxuat0 = manhapxuat;
            this.Dathang = Dathang;
            InitializeComponent();
        }

        #region F
        string mahang;
        string dvt;
        float slchuaquydoi;
        float slquydoi;
        float slnhapxuat;
        int dgnhapxuat;
        int thanhtien;
        int chietkhau;

        /// <summary>
        /// Kiểm tra coi có ValiInput hok để cho save
        /// </summary>
        bool isSave = true;
        #endregion

        BanHangCshap.Class.PhieuNhapXuatSub clspnxs = new BanHangCshap.Class.PhieuNhapXuatSub();
        BanHangCshap.Class.PhieuNhapXuatCTSub pnxcts = new BanHangCshap.Class.PhieuNhapXuatCTSub();
        /// <summary>
        /// Để bơn in ra nóa biếc đâi nà nần suấc thứ mái bởi dì đã xắp xíp theo s dứi đê bê rầu (99,99% xai chánh tã). Độc cũng thiệt là ĐỘC
        /// </summary>
        public static Guid Id_Langiaohang = Guid.Empty;

        private void Load_ChitietPhieuxuat()
        {
            DataTable dt = clspnxs.PhieuNhapXuatSub_Select_ChitietPhieunhap(manhapxuat);
            gcPhieuuxuat.DataSource = dt;
            gleHanghoa.DisplayMember = "maten";
            gleHanghoa.ValueMember = "mahang";
            gleHanghoa.DataSource = dt;
        }

        private void ControlControl(bool isE, bool IsS)
        {
            btnLuu.Enabled = !isE;
            //btnIn.Enabled = !isE;
            if (isE && !IsS)
            {
                gcChitietLanxuat.DataSource = null;
                txtGhichu.EditValue = null;
            }
            else gcChitietLanxuat.DataSource = dtChitietLangiaohang;
            gvChitietLanxuat.OptionsBehavior.Editable = !isE;
            txtGhichu.Enabled = !isE;
        }

        DataTable dtChitietLangiaohang = new DataTable();
        private void TaoTable()
        {
            DataColumn mahang = new DataColumn("mahang", typeof(string));
            DataColumn dvt = new DataColumn("dvt", typeof(string));
            DataColumn slchuaquydoi = new DataColumn("slchuaquydoi", typeof(float));
            DataColumn slquydoi = new DataColumn("slquydoi", typeof(float));
            DataColumn slnhapxuat = new DataColumn("slnhapxuat", typeof(float));
            DataColumn dgnhapxuat = new DataColumn("dgnhapxuat", typeof(int));
            DataColumn chietkhau = new DataColumn("chietkhau", typeof(int));
            DataColumn thanhtien = new DataColumn("thanhtien", typeof(int));
            dtChitietLangiaohang.Columns.Add(mahang);
            dtChitietLangiaohang.Columns.Add(dvt);
            dtChitietLangiaohang.Columns.Add(slchuaquydoi);
            dtChitietLangiaohang.Columns.Add(slquydoi);
            dtChitietLangiaohang.Columns.Add(slnhapxuat);
            dtChitietLangiaohang.Columns.Add(dgnhapxuat);
            dtChitietLangiaohang.Columns.Add(chietkhau);
            dtChitietLangiaohang.Columns.Add(thanhtien);

            gcChitietLanxuat.DataSource = dtChitietLangiaohang;
        }

        private void Load_dvt(string mahang)
        {
            cbxDvt.Items.Clear();
            var dt = clspnxs.PhieuNhapXuatCTSub_Select_Hanghoa_In_Hanghoa(mahang);
            cbxDvt.Items.Add(dt.Rows[0]["dvt"].ToString());
            if (dt.Rows[0]["dvt1"].ToString().Trim() != "")
            {
                cbxDvt.Items.Add(dt.Rows[0]["dvt1"].ToString());
            }
            if (dt.Rows[0]["dvt2"].ToString().Trim() != "")
            {
                cbxDvt.Items.Add(dt.Rows[0]["dvt2"].ToString());
            }
        }

        private void Load_DSCaclangiao()
        {
            gcCaclanxuat.DataSource = clspnxs.PhieuNhapXuatSub_Select(manhapxuat);
        }

        private void frmBanhangS_Load(object sender, EventArgs e)
        {
            manhapxuat = manhapxuat0;
            
            gvCaclanxuat.GroupPanelText = "Các lần giao hàng";
            gvChitietLanxuat.GroupPanelText = "Chi tiết các lần giao hàng";
            this.Text = String.Format("Các lần giao hàng cho__{0}__của khách {1}", manhapxuat, kh);
            Load_ChitietPhieuxuat();
            Load_DSCaclangiao();
            TaoTable();

            btnIn.Enabled = false;
            if (!Dathang)
            {
                btnTaomoi.Enabled = false;
                btnLuu.Enabled = false;
            }
        }

        private void gvChitietLanxuat_InitNewRow(object sender, DevExpress.XtraGrid.Views.Grid.InitNewRowEventArgs e)
        {
            if (InitNewRowB)
            {
                gvChitietLanxuat.SetRowCellValue(e.RowHandle, colHanghoa, mahang);
                gvChitietLanxuat.SetRowCellValue(e.RowHandle, coldvt, dvt);
                gvChitietLanxuat.SetRowCellValue(e.RowHandle, colslchuaquydoi, slchuaquydoi);
                gvChitietLanxuat.SetRowCellValue(e.RowHandle, colslquydoi, slquydoi);
                gvChitietLanxuat.SetRowCellValue(e.RowHandle, colslnhapxuat, slnhapxuat);
                gvChitietLanxuat.SetRowCellValue(e.RowHandle, coldgnhapxuat, dgnhapxuat);
                gvChitietLanxuat.SetRowCellValue(e.RowHandle, colchietkhau, chietkhau);
                gvChitietLanxuat.SetRowCellValue(e.RowHandle, colthanhtien, thanhtien);
                InitNewRowB = false;
                try
                {
                    Load_dvt(mahang);
                }
                catch (Exception)
                {
                }
            }
        }

        bool InitNewRowB = false;
        private void gleHanghoa_EditValueChanging(object sender, DevExpress.XtraEditors.Controls.ChangingEventArgs e)
        {
            try
            {
                DataRow[] dr1 = ((DataTable)gcChitietLanxuat.DataSource).Select(String.Format("mahang ='{0}'", e.NewValue.ToString()));
                if (dr1.Length == 0)
                {
                    InitNewRowB = true;
                    try
                    {
                        DataRow[] dr = ((DataTable)gleHanghoa.DataSource).Select(String.Format("mahang ='{0}'", e.NewValue));
                        if (dr.Length > 0)
                        {
                            mahang = e.NewValue.ToString();
                            dvt = dr[0]["dvt0"].ToString();
                            slchuaquydoi = (float)dr[0]["chuagiao"].ToDecimal();
                            slnhapxuat = slchuaquydoi;
                            slquydoi = 1;
                            dgnhapxuat = dr[0]["dgnhapxuat"].ToInt32();
                            chietkhau = dr[0]["chietkhau"].ToInt32();
                            thanhtien = (int)(slchuaquydoi * dgnhapxuat - slchuaquydoi * dgnhapxuat * chietkhau / 100);

                            gvChitietLanxuat.SetFocusedRowCellValue(colHanghoa, mahang);
                            gvChitietLanxuat.SetFocusedRowCellValue(coldvt, dvt);
                            gvChitietLanxuat.SetFocusedRowCellValue(colslchuaquydoi, slchuaquydoi);
                            gvChitietLanxuat.SetFocusedRowCellValue(colslquydoi, slquydoi);
                            gvChitietLanxuat.SetFocusedRowCellValue(colslnhapxuat, slnhapxuat);
                            gvChitietLanxuat.SetFocusedRowCellValue(coldgnhapxuat, dgnhapxuat);
                            gvChitietLanxuat.SetFocusedRowCellValue(colthanhtien, thanhtien);
                            gvChitietLanxuat.SetFocusedRowCellValue(colchietkhau, chietkhau);

                            gvChitietLanxuat.UpdateCurrentRow();
                        }
                    }
                    catch (Exception)
                    {
                    }
                }
                else
                {
                    DevExpress.XtraEditors.XtraMessageBox.Show("Mặt hàng này đã có rồi", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    gvChitietLanxuat.DeleteSelectedRows();
                }
            }
            catch (Exception)
            {
            }
        }

        private void gvChitietLanxuat_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
        {
            try
            {
                string mahang = gvChitietLanxuat.GetFocusedRowCellValue("mahang").ToString();
                Load_dvt(mahang);
            }
            catch (Exception)
            {
            }
        }

        private void gvChitietLanxuat_CellValueChanging(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
        {
            DataRow dr = gvChitietLanxuat.GetFocusedDataRow();

            if (e.Column.ToString() == "Đvt")
            {
                float slquydoiX = (float)dr["slquydoi"].ToDecimal();
                //Chủ yếu lấy các đơn vị tính và hệ số quy đổi (slquydoi = pà cha cái tên)
                DataTable dt = clspnxs.PhieuNhapXuatCTSub_Select_Hanghoa_In_Hanghoa(dr["mahang"].ToString());
                //Lấy thông tin chủ yếu là giá và cái slquydoi trong lần xuất
                DataRow[] dr1 = ((DataTable)gcPhieuuxuat.DataSource).Select(String.Format("mahang ='{0}'", dr["mahang"].ToString()));

                //Nếu là đơn vị tính cơ bản
                if (e.Value.ToString() == dt.Rows[0]["dvt"].ToString())
                {
                    slquydoi = 1;
                    dgnhapxuat = (int)(dr1[0]["dgnhapxuat"].ToInt32() / (float)dr1[0]["slquydoi"].ToDecimal() * slquydoi);
                    thanhtien = (int)(slchuaquydoi * dgnhapxuat - slchuaquydoi * dgnhapxuat * chietkhau / 100);

                    gvChitietLanxuat.SetRowCellValue(e.RowHandle, colslquydoi, slquydoi);
                    gvChitietLanxuat.SetRowCellValue(e.RowHandle, coldgnhapxuat, dgnhapxuat);
                    gvChitietLanxuat.SetRowCellValue(e.RowHandle, colthanhtien, thanhtien);

                    if (dr["slchuaquydoi"].ToDecimal() > dr1[0]["chuagiao"].ToDecimal())
                    {
                        DevExpress.XtraEditors.XtraMessageBox.Show(String.Format("Mặt hàng này chỉ chưa giao {0} {1}", dr1[0]["chuagiao"], dr1[0]["dvt0"]), "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                    else isSave = true;

                    return;
                }
                //Nếu là đơn vị tính 1
                if (e.Value.ToString() == dt.Rows[0]["dvt1"].ToString())
                {
                    slquydoi =(float)dt.Rows[0]["tilequydoi1"].ToDecimal();
                    dgnhapxuat = (int)(dr1[0]["dgnhapxuat"].ToInt32() / (float)dr1[0]["slquydoi"].ToDecimal() * slquydoi);
                    thanhtien = (int)(slchuaquydoi * dgnhapxuat - slchuaquydoi * dgnhapxuat * chietkhau / 100);

                    gvChitietLanxuat.SetRowCellValue(e.RowHandle, colslquydoi, slquydoi);
                    gvChitietLanxuat.SetRowCellValue(e.RowHandle, coldgnhapxuat, dgnhapxuat);
                    gvChitietLanxuat.SetRowCellValue(e.RowHandle, colthanhtien, thanhtien);

                    if (dr["slchuaquydoi"].ToDecimal() * dt.Rows[0]["tilequydoi1"].ToDecimal() > dr1[0]["chuagiao"].ToDecimal())
                    {
                        DevExpress.XtraEditors.XtraMessageBox.Show(String.Format("Mặt hàng này chỉ chưa giao {0} {1}", dr1[0]["chuagiao"], dr1[0]["dvt0"]), "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        isSave = false;
                    }
                    else isSave = true;

                    return;
                }
                //Nếu là đơn vị tính 2
                if (e.Value.ToString() == dt.Rows[0]["dvt2"].ToString())
                {
                    slquydoi = (float)dt.Rows[0]["tilequydoi2"].ToDecimal();
                    dgnhapxuat = (int)(dr1[0]["dgnhapxuat"].ToInt32() / (float)dr1[0]["slquydoi"].ToDecimal() * slquydoi);
                    thanhtien = (int)(slchuaquydoi * dgnhapxuat - slchuaquydoi * dgnhapxuat * chietkhau / 100);

                    gvChitietLanxuat.SetRowCellValue(e.RowHandle, colslquydoi, slquydoi);
                    gvChitietLanxuat.SetRowCellValue(e.RowHandle, coldgnhapxuat, dgnhapxuat);
                    gvChitietLanxuat.SetRowCellValue(e.RowHandle, colthanhtien, thanhtien);

                    if (dr["slchuaquydoi"].ToDecimal() * dt.Rows[0]["tilequydoi2"].ToDecimal() > dr1[0]["chuagiao"].ToDecimal())
                    {
                        DevExpress.XtraEditors.XtraMessageBox.Show(String.Format("Mặt hàng này chỉ chưa giao {0} {1}", dr1[0]["chuagiao"], dr1[0]["dvt0"]), "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        isSave = false;
                    }
                    else isSave = true;
                }
            }

            if (e.Column.ToString() == "Số lượng")
            {
                DataRow[] dr1 = ((DataTable)gcPhieuuxuat.DataSource).Select(String.Format("mahang ='{0}'", dr["mahang"].ToString()));
                if (e.Value.ToDecimal() * dr["slquydoi"].ToDecimal() > dr1[0]["chuagiao"].ToDecimal())
                {
                    DevExpress.XtraEditors.XtraMessageBox.Show(String.Format("Mặt hàng này chỉ chưa giao {0} {1}", dr1[0]["chuagiao"], dr1[0]["dvt0"]), "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    isSave = false;
                }
                else
                {
                    isSave = true;
                    thanhtien = (int)(e.Value.ToDecimal() * dgnhapxuat - e.Value.ToDecimal() * dgnhapxuat * chietkhau / 100);
                    gvChitietLanxuat.SetRowCellValue(e.RowHandle, colthanhtien, thanhtien);
                }
            }
        }

        private void btnTaomoi_Click(object sender, EventArgs e)
        {
            btnLuu.Enabled = true;
            btnIn.Enabled = false;
            txtGhichu.Enabled = true;
            txtGhichu.EditValue = null;
            gvChitietLanxuat.OptionsBehavior.Editable = true;
            dtChitietLangiaohang.Clear();
            gcChitietLanxuat.DataSource = dtChitietLangiaohang;
        }


        public event MyEvent_LoadData MyEvent_LoadData_ThongtinPhieuxuat = null;
        private void btnLuu_Click(object sender, EventArgs e)
        {
            bool Oki = true;
            if (isSave)
            {
                if (DevExpress.XtraEditors.XtraMessageBox.Show("Bạn có chắc muốn lưu lần giao hàng này\n\n Những thông tin này sẽ không đc sữa đổi!!!", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    clspnxs.Id = Guid.NewGuid();
                    Id_Langiaohang = clspnxs.Id;
                    clspnxs.Ngay = DateTime.Now;
                    clspnxs.tennd = UserStatic.tendn;
                    clspnxs.Ghichu = txtGhichu.Text.ToUpperFirst();
                    clspnxs.manhapxuat = manhapxuat;
                    DatabaseStatic.sqltrans = DatabaseStatic.conn.BeginTransaction();
                    if (clspnxs.PhieuNhapXuatSub_Insert())
                    {
                        int CountR = gvChitietLanxuat.DataRowCount;

                        for (int i = 0; i < CountR; i++)
                        {
                            try
                            {
                                DataRow dr = gvChitietLanxuat.GetDataRow(i);
                                pnxcts.Id = Guid.NewGuid();
                                pnxcts.Id_PhieuNhapXuatSub = clspnxs.Id;
                                pnxcts.mahang = dr["mahang"].ToString();
                                pnxcts.dvt = dr["dvt"].ToString();
                                pnxcts.slchuaquydoi = (float)dr["slchuaquydoi"].ToDecimal();
                                pnxcts.slquydoi = (float)dr["slquydoi"].ToDecimal();
                                pnxcts.slnhapxuat = pnxcts.slchuaquydoi * pnxcts.slquydoi;
                                pnxcts.dgnhapxuat = dr["dgnhapxuat"].ToInt32();
                                pnxcts.chietkhau = dr["chietkhau"].ToInt32();
                                pnxcts.thanhtien = dr["thanhtien"].ToInt32();
                            }
                            catch (Exception)
                            {
                                continue;
                            }
                            if (!pnxcts.PhieuNhapXuatCTSub_Insert())
                            {
                                Oki = false;
                                break;
                            }
                        }
                    }
                    else
                    {
                        Oki = false;
                    }

                    if (Oki)
                    {
                        DatabaseStatic.sqltrans.Commit();
                        /*
                         * Load cái gì đó thì tùy bây giờ mần biến viết rầu đi rữa mặt cái đã
                         */
                        Load_DSCaclangiao();
                        Load_ChitietPhieuxuat();

                        btnIn.Enabled = true;
                        btnLuu.Enabled = false;
                        gvChitietLanxuat.OptionsBehavior.Editable = false;
                        txtGhichu.Enabled = false;

                        int Cx = ((DataTable)gcPhieuuxuat.DataSource).Rows.Count;
                        for (int i = 0; i < Cx; i++)
                        {
                            DataRow dr = gvPhieuxuat.GetDataRow(i);
                            if (dr["chuagiao"].ToDecimal() != 0)
                            {
                                clspnxs.PhieuNhapxuatCTSub_Update_Trangthaiphieu(manhapxuat, new Guid("a864d689-7c31-4bf4-b009-0405cfadef97"));
                                if (MyEvent_LoadData_ThongtinPhieuxuat != null)
                                {
                                    MyEvent_LoadData_ThongtinPhieuxuat(this, new ELoadData() { IsLoadData = true });
                                }
                                return;
                            }
                        }
                        clspnxs.PhieuNhapxuatCTSub_Update_Trangthaiphieu(manhapxuat, new Guid("a864d689-7c31-4bf4-b000-0405cfadef99"));
                        if (MyEvent_LoadData_ThongtinPhieuxuat != null)
                        {
                            MyEvent_LoadData_ThongtinPhieuxuat(this, new ELoadData() { IsLoadData = true });
                        }
                    }
                    else
                    {
                        DatabaseStatic.sqltrans.Rollback();
                        UltitityStatic.thongBaoLoi("Không thể lưu. Xin kiểm tra lại thông tin.");
                    }
                }
            }
            else DevExpress.XtraEditors.XtraMessageBox.Show("Không thể lưu\n\nVui lòng kiểm tra lại số lượng xuất", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);

        }

        public static int RowIndex = 0;
        private void gvCaclanxuat_DoubleClick(object sender, EventArgs e)
        {
            try
            {
                gcChitietLanxuat.DataSource = pnxcts.PhieuNhapXuatCTSub_Select(Id_Langiaohang);

                txtGhichu.EditValue = gvCaclanxuat.GetFocusedRowCellValue("Ghichu").ToString();

                btnIn.Enabled = true;
                btnLuu.Enabled = false;
                gvChitietLanxuat.OptionsBehavior.Editable = false;
                txtGhichu.Enabled = false;

                RowIndex = gvCaclanxuat.RowCount - gvCaclanxuat.FocusedRowHandle;
                Id_Langiaohang = gvCaclanxuat.GetFocusedRowCellValue("Id").GetGuid();
            }
            catch (Exception)
            {
            }
        }

        private void btnIn_Click(object sender, EventArgs e)
        {
            BanHangCshap.Report.gkhtdl63.frmMainRPTS frm = new BanHangCshap.Report.gkhtdl63.frmMainRPTS();
            BanHangCshap.Report.gkhtdl63.MyRPT.Dathang.rptDathangH rpt = new BanHangCshap.Report.gkhtdl63.MyRPT.Dathang.rptDathangH();
            rpt.DataSource = clspnxs.PhieuNhapXuatCTSub_Select_Khachhang(manhapxuat);
            frm.SetReport(rpt);
            frm.ShowDialog();
        }

        private void gvCaclanxuat_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
        {
            RowIndex = gvCaclanxuat.RowCount - gvCaclanxuat.FocusedRowHandle;
            Id_Langiaohang = gvCaclanxuat.GetFocusedRowCellValue("Id").GetGuid();
        }

        private void btnIn1_Click(object sender, EventArgs e)
        {
            btnIn_Click(null, null);
        }

        private void btnXoa_Click(object sender, EventArgs e)
        {
            if (XtraMessageBox.Show("Bạn có chắc muốn xóa lần giao hàng này không?","Thông báo",MessageBoxButtons.YesNo,MessageBoxIcon.Question)==DialogResult.Yes)
            {
                Guid Id = gvCaclanxuat.GetFocusedRowCellValue("Id").GetGuid();
                if (clspnxs.PhieunhapxuatSub_Xoa(Id))
                {
                    btnIn.Enabled = false;
                    btnLuu.Enabled = false;
                    gvChitietLanxuat.OptionsBehavior.Editable = false;
                    txtGhichu.EditValue = null;
                    txtGhichu.Enabled = false;
                    Load_ChitietPhieuxuat();
                    Load_DSCaclangiao();

                    if (gvCaclanxuat.RowCount == 0)
                    {

                        clspnxs.PhieuNhapxuatCTSub_Update_Trangthaiphieu(manhapxuat, new Guid("a864d689-7c31-4bf4-b009-0405cfadef98"));
                        if (MyEvent_LoadData_ThongtinPhieuxuat != null)
                        {
                            MyEvent_LoadData_ThongtinPhieuxuat(this, new ELoadData() { IsLoadData = true });
                        }
                        return;
                    }
                    
                    int Cx = ((DataTable)gcPhieuuxuat.DataSource).Rows.Count;
                    for (int i = 0; i < Cx; i++)
                    {
                        DataRow dr = gvPhieuxuat.GetDataRow(i);
                        if (dr["chuagiao"].ToDecimal() != 0)
                        {
                            clspnxs.PhieuNhapxuatCTSub_Update_Trangthaiphieu(manhapxuat, new Guid("a864d689-7c31-4bf4-b009-0405cfadef97"));
                            if (MyEvent_LoadData_ThongtinPhieuxuat != null)
                            {
                                MyEvent_LoadData_ThongtinPhieuxuat(this, new ELoadData() { IsLoadData = true });
                            }
                            return;
                        }
                    }
                    clspnxs.PhieuNhapxuatCTSub_Update_Trangthaiphieu(manhapxuat, new Guid("a864d689-7c31-4bf4-b000-0405cfadef99"));
                    if (MyEvent_LoadData_ThongtinPhieuxuat != null)
                    {
                        MyEvent_LoadData_ThongtinPhieuxuat(this, new ELoadData() { IsLoadData = true });
                    }

                    XtraMessageBox.Show("Đã xóa thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
        }
    }
}
